/**************************************************************************
 * @name: keyboard.c
 * @brief: 数字键盘代码
 * @date: 2025/01/16
 * @author: boluzs@163.com
 * @note: None
 * @version: 1.0.0
 * @Copyright (c) 2025 by boluzs@163.com, All Rights Reserved.
 **************************************************************************/
#include "main.h"
#include "menu.h"
#include "bmp.h"
#include "keyboard.h"

void Keyboard_Event(char *str, char *str2, bool is_show_str2, unsigned int str_maxsize, int x_off, int y_off)
{
    unsigned int x = 0, y = 0; // 记录点击坐标
    printf("进入小键盘输入模式\n");
    for (;;)
    {
        if (touch_data.ts_x != x && touch_data.ts_y != y)
        {
            printf("触摸松开，坐标: X = %d, Y = %d\n", touch_data.ts_x, touch_data.ts_y);
            // 数字键 1
            if (Is_Touch_In_Area(80, 140, 270, 360) && strlen(str) < str_maxsize)
            {
                strcat(str, "1"); // 将 "1" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 2
            else if (Is_Touch_In_Area(160, 240, 270, 360) && strlen(str) < str_maxsize)
            {
                strcat(str, "2"); // 将 "2" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 3
            else if (Is_Touch_In_Area(250, 350, 270, 360) && strlen(str) < str_maxsize)
            {
                strcat(str, "3"); // 将 "3" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 4
            else if (Is_Touch_In_Area(80, 140, 180, 270) && strlen(str) < str_maxsize)
            {
                strcat(str, "4"); // 将 "4" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 5
            else if (Is_Touch_In_Area(160, 240, 180, 270) && strlen(str) < str_maxsize)
            {
                strcat(str, "5"); // 将 "5" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 6
            else if (Is_Touch_In_Area(250, 350, 180, 270) && strlen(str) < str_maxsize)
            {
                strcat(str, "6"); // 将 "6" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 7
            else if (Is_Touch_In_Area(80, 140, 80, 180) && strlen(str) < str_maxsize)
            {
                strcat(str, "7"); // 将 "7" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 8
            else if (Is_Touch_In_Area(160, 240, 80, 180) && strlen(str) < str_maxsize)
            {
                strcat(str, "8"); // 将 "8" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 数字键 9
            else if (Is_Touch_In_Area(250, 350, 80, 180) && strlen(str) < str_maxsize)
            {
                strcat(str, "9"); // 将 "9" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 删除按钮
            else if (Is_Touch_In_Area(80, 140, 360, 480))
            {
                size_t len = strlen(str);
                if (len > 0)
                {
                    str[len - 1] = '\0'; // 删除最后一个字符
                    if (str2 != NULL)
                    {
                        str2[len - 1] = '\0'; // 删除最后一个字符
                    }
                }
            }
            // 数字键 0
            else if (Is_Touch_In_Area(160, 240, 360, 480) && strlen(str) < str_maxsize)
            {
                strcat(str, "0"); // 将 "0" 追加到 str
                if (str2 != NULL)
                {
                    strcat(str2, "*"); // 将 "*" 追加到 str2
                }
            }
            // 确认按钮
            else if (Is_Touch_In_Area(250, 350, 360, 480))
            {
                break;
            }

            x = touch_data.ts_x;
            y = touch_data.ts_y;
            // 实时更新输入框的显示内容
            Show_Font(25, 350, 50, 4, getColor(0, 255, 255, 255), 0, 12, str, getColor(0, 0, 0, 0), 350, x_off, y_off);
            if (str2 != NULL && !is_show_str2)
            {
                Show_Font(25, 350, 50, 4, getColor(0, 255, 255, 255), 0, 12, str2, getColor(0, 0, 0, 0), 350, x_off, y_off);
                Bmp_Show(EN_EYE_BMP, lcd_buf, 700, 200);
            }
            else if (str2 != NULL && is_show_str2)
            {
                Show_Font(25, 350, 50, 4, getColor(0, 255, 255, 255), 0, 12, str, getColor(0, 0, 0, 0), 350, x_off, y_off);
                Bmp_Show(EYE_BMP, lcd_buf, 700, 200);
            }
            Lcd_Refresh(lcd_mp, lcd_buf);
        }
        bool is_in_area_1 = Is_Touch_In_Area(40, 350, 80, 480);
        bool is_in_area_2 = Is_Touch_In_Area(400, 750, 110, 160);
        bool is_in_area_3 = Is_Touch_In_Area(400, 750, 220, 280);
        // bool is_in_area_4 = Is_Touch_In_Area(700, 750, 220, 280);
        // if (!is_in_area_4)
        // {
        //     break;
        // }

        // 检测是否用户点触其他区域（如密码框或空白区域）来退出小键盘输入模式
        // if (!(Is_Touch_In_Area(40, 350, 80, 480))) // 如果触摸点不在小键盘的区域
        if (!is_in_area_1 && !is_in_area_2 && !is_in_area_3)
        {
            printf("is_in_area_1: %d\n", !is_in_area_1);
            printf("is_in_area_2: %d\n", !is_in_area_2);
            printf("is_in_area_3: %d\n", !is_in_area_3);
            printf("坐标在小键盘外: X = %d, Y = %d\n", touch_data.ts_x, touch_data.ts_y);
            break; // 退出小键盘输入模式
        }
    }
}
